package com.zlsy.thread.threadpool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author zhouliang
 * @date 2020/6/30 21:29
 * <p>
 * 演示 newFixedThreadPool(固定线程池)
 */
public class FixedThreadPoolTest {


    /**
     * 源码分析：
     * - 核心线程数和最大线程数都是一样的，所以线程数量永远不可能超过你设置的线程数量：nThreads。
     * - 存活时间为0，这是因为核心线程数和最大线程数都是一样的，所以不存在需要回收的线程。
     * - 队列使用的无界队列，不管你丢多少的任务进来，都只会以固定的线程数去跑，其他任务都放入队列里面，
     *   然而队列又没有大小的限制，所以可能会导致OOM。
     */
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(4);
        FixedThreadPoolTask task = new FixedThreadPoolTask();
        for (int i = 0; i < 100; i++) {
            executorService.execute(task);
        }
        executorService.shutdown();
    }

    static class FixedThreadPoolTask implements Runnable {

        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName());
        }
    }
}
